#ifndef ILOADER_HPP
#define ILOADER_HPP

//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <string>
#include <Geometry/Mesh.hpp>

namespace Geometry {
//-----------------------------------------------------------------------------
class GeometryLoader {
public:		
	// Constructor
	GeometryLoader(const std::string& extension);
	// Destructor
	virtual ~GeometryLoader();
	//
	std::string GetExtension() const;
	//
	virtual TMeshPointer LoadFromFile(const std::string& filename)=0;
private:
	// Constructor
	GeometryLoader(const GeometryLoader& copy);	
	GeometryLoader& operator=(const GeometryLoader& copy);
	//
	std::string extension;	
};
//-----------------------------------------------------------------------------
class PLYLoader : public GeometryLoader {
public:		
	// Constructor
	PLYLoader();
	// Destructor
	virtual ~PLYLoader();
	//
	virtual TMeshPointer LoadFromFile(const std::string& filename);
private:
	// Constructor
	PLYLoader(const PLYLoader& copy);	
	PLYLoader& operator=(const PLYLoader& copy);
};
//-----------------------------------------------------------------------------
}

#endif //ILOADER_HPP
